#include "fbm.h"

uint16 get_fbm(void)
{
	uint16 _iret = 0;

	_asm push	bx
	_asm push	es
	_asm mov	bx, 40h
	_asm mov	es, bx
	_asm mov	ax, es:[13h]
	_asm mov	_iret, ax
	_asm pop	es
	_asm pop	bx

	return _iret;
}

static void set_fbm(uint16 _size)
{
	_asm push	bx
	_asm push	es
	_asm mov	bx, 40h
	_asm mov	es, bx
	_asm mov	ax, _size;
	_asm mov	es:[13h], ax;
	_asm pop	es
	_asm pop	bx
}

uint16 malloc_fbm(uint16 size)
{
	uint16 _iret = 0;
	_iret = get_fbm();

	if (_iret < size)
		return _iret;

	_iret -= size;
	set_fbm(_iret);

	return _iret;
}

uint16 free_fbm(uint16 size)
{
	uint16 _iret = 0;

	_iret = get_fbm();

	_iret += size;
	set_fbm(_iret);

	return _iret;
}

